package plateau;

import structureDeDonnee.Matrice;
import structureDeDonnee.Position;

/**
 * Un plateau est un objet représentant une configuration du jeu de la vie à une
 * étape n avec la possibilité de passer à l'étape n+1 selon des règle qui lui
 * sont propres
 */
public interface Plateau {

	/**
	 * passe les cellules du plateau à la générétation suivante
	 * 
	 * @return la matrice représentant les cellules du plateau avant le
	 *         passage à la génération suivante
	 */
	public Matrice etapeSuivante();

	/**
	 * @return la matrice représentant les cellules du plateau
	 */
	public Matrice getMatrice();
	/**
	 * Dit si les cellules de la matrice envoyé en paramètre ont la même
	 * position que les cellules du plateau à une translation prêt. Si oui donne
	 * le vecteur de translation.
	 * 
	 * @param m
	 *            matrice contenant la liste de cellules que l'on veux comparer aux
	 *            cellules du plateau
	 * @param p
	 *            si la fonction renvoit vrai, met à jour p de façon à
	 *            ce qu'il contienne les valeurs du vecteur de translation dans
	 *            p.
	 * @return vrai si les cellules de la liste de cellules envoyé en paramêtre
	 *         ont la même position que les cellules du plateau à une
	 *         translation prêt
	 */
	public boolean estUneTranslation(Matrice m, Position p);

	/**
	 * @return une copie de this
	 */
	public Plateau clone();

	/**
	 * affiche this
	 * @return vrai si l'utilisateur veux passer à la génération suivante, faux sinon
	 */
	public boolean afficher();

}
